package clinic.ms.service;

import clinic.ms.entity.Item;
import clinic.ms.entity.Patient;
import clinic.ms.entity.Pie;
import clinic.ms.mapper.PatientMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

@Service

public class PatientServiceImpl {
    @Autowired
   PatientMapper patientMapper;


    public Patient queryPaByNo(String patientNo){
        return patientMapper.queryPaByNo(patientNo);
    }

    public Patient queryPaByName(String patientName){
        return patientMapper.queryPaByName(patientName);
    }


    public void insert(Patient patient) {
        patientMapper.insertPatient(patient);
    }

    public void delete(String patientNo){
        patientMapper.delete(patientNo);
    }

    public void update(Patient patient){
        patientMapper.update(patient);
    }


    public List<Patient> findAll(){
        return patientMapper.findAll();
    }



    public List<Pie> queryPaByMonth(String begin, String end){
        List<Pie> patientCount = new ArrayList<>();
        List<String> timeList = getMonthBetween(begin,end);

        for(String time:timeList){
            System.out.println(time);
            patientCount.add(new Pie(time,patientMapper.queryPaByMonth(time),0));
        }
        return patientCount;
    }

    private List<String> getMonthBetween(String minDate, String maxDate){
        ArrayList<String> result = new ArrayList<String>();
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");//格式化为年月

            Calendar min = Calendar.getInstance();
            Calendar max = Calendar.getInstance();
            min.setTime(sdf.parse(minDate));
            min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);

            max.setTime(sdf.parse(maxDate));
            max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);

            Calendar curr = min;
            while (curr.before(max)) {
                result.add(sdf.format(curr.getTime()));
                curr.add(Calendar.MONTH, 1);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return result;
    }



}
